/*
The Template Method pattern is a design pattern lets you define the
skeleton of an algorithm in an operation, deferring some steps to subclasses.
For example you want to make a pizza and you want to make it with
tomato sauce, cheese and ham but you don't want to repeat the same
steps for every pizza you make so instead you can define the steps
in a template method and then you can use it to make different pizzas.
The Implementation will be like this
*/
class Pizza {
public makePizza() {
this.prepareDough();
this.addSauce();
this.addToppings();
this.bake();
}
public prepareDough() {
console.log('Preparing dough...');
}
public addSauce() {
console.log('Adding sauce...');
}
public addToppings() {
console.log('Adding toppings: cheese, ham, mushrooms');
}
public bake() {
console.log('Bake for 25 minutes at 350');
}
}